iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Web 3

Smart-Contract Language: Move系列 第 16

Day 16 Advanced Topics: Signer

  • 分享至 

  • xImage
  •  

本篇來介紹 Signer 類型。

signer 簽名者是一種原生的不可複製 (類資源) 類型,他保存交易發送者的地址。允許持有人代表特定 address

// 本機實現
struct signer has drop { a: address }

簽名者類型代表發件人權限。換句話說 - 使用簽名者意味著訪問發送者的地址和資源。它與簽名或字面簽名沒有直接關係,就 Move VM 而言,它只是代表發送者。

簽名者類型只有一種能力: drop

比較 address

一個 Move 程式可以在沒有特殊許可的情況下使用地址 address 文字創建任何值:

let a1 = @0x1;
let a2 = @0x2;

但是,signer值是特殊的,因為它們不能通過文字或指令創建,只能由 Move VM 創建。在 VM 運行帶有 type 參數的腳本之前signer,它會自動創建signer值並將它們傳遞給腳本:

script {
    use Std::Signer;
    fun main(s: signer) {
        assert!(Signer::address_of(&s) == @0x42, 0);
    }
}

須注意是,所有簽名者參數必須放在第一位

script {
    use Std::Signer;
    fun main(s1: signer, s2: signer, x: u64, y: u8) {
        // ...
    }
}

操作

  • Signer::address_of(&signer): address
    • 返回address由 this 包裹的&signer
  • Signer::borrow_address(&signer): &address
    • 返回address 對此包裝的引用&signer

Signer 值是不可複製的,意味著無論任何操作或是通過 copy 和 reference 都無法複製。

讓我們 Move to Day 17


上一篇
Day 15 Advanced Topics: Vector
下一篇
Day 17 Advanced Topics: Resource
系列文
Smart-Contract Language: Move30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言